package agentesia;

import java.awt.Dimension;
import java.io.File;
import java.util.*;
import javax.swing.JOptionPane;
import juegoPizza.PizzaGUI;
import juegoTerritorio.GUI_Territorio;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GUI_Agentes.java
 *
 * Created on 7/09/2010, 07:39:38 AM
 */

/**
 *
 * @author jorgeorm
 */
public class GUI_Agentes extends javax.swing.JFrame {

    private int posJugador;
    private boolean terminar;

    /** Creates new form GUI_Agentes */
    public GUI_Agentes() {
        tamanoEscX=8;
        tamanoEscY=8;
        initComponents();
        this.setVisible(true);
        jfc_selectorEscenario.setCurrentDirectory(new File("src/escenarios/"));
        this.setIgnoreRepaint(true);
        returnValJFC=0;

        tablero=new int [tamanoEscX][tamanoEscY];
        int numero=64;
        boolean decre=true;
        for (int idy=0;idy<tamanoEscY;idy++)
        {
            for (int idx=0;idx<tamanoEscX;idx++)
            {
                tablero[idx][idy]=numero;
                System.out.print(tablero[idx][idy]+" ");

                if(decre)numero--;
                else numero++;
            }
            System.out.println("");
            if(decre)numero++;
            else numero--;
            numero=numero-8;
            decre=!decre;
        }
        int[] snakesNladders=new int[64];

        //Ladders
        snakesNladders[11]=28;
        snakesNladders[16]=33;
        snakesNladders[40]=57;
        //Snakes
        snakesNladders[30]=4;
        snakesNladders[26]=10;
        snakesNladders[34]=29;
        snakesNladders[54]=44;
        snakesNladders[62]=48;
        snakesNladders[60]=53;

        obj_SnaksNLadres=new EscenarioSnakesNLadrs(snakesNladders,tablero);
        obj_escenario.setEscenario(tablero);

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jfc_selectorEscenario = new javax.swing.JFileChooser();
        jp_juego = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jb_lanzarDado = new javax.swing.JButton();
        jmb_config = new javax.swing.JMenuBar();
        jm_juego = new javax.swing.JMenu();
        j_mItemIniciar = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SnakesAndLadders");
        getContentPane().setLayout(new java.awt.FlowLayout());

        jp_juego.setPreferredSize(new Dimension(ancho,alto));
        //Creación del Canvas
        obj_escenario=new EscenarioGrafico(600,600);

        javax.swing.GroupLayout jp_juegoLayout = new javax.swing.GroupLayout(jp_juego);
        jp_juego.setLayout(jp_juegoLayout);
        jp_juegoLayout.setHorizontalGroup(
            jp_juegoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 620, Short.MAX_VALUE)
        );
        jp_juegoLayout.setVerticalGroup(
            jp_juegoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 711, Short.MAX_VALUE)
        );

        jp_juego.add("Center",obj_escenario);

        getContentPane().add(jp_juego);

        jb_lanzarDado.setText("Lanzar Dado");
        jb_lanzarDado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jb_lanzarDadoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jb_lanzarDado)
                .addContainerGap(22, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jb_lanzarDado)
                .addContainerGap(59, Short.MAX_VALUE))
        );

        getContentPane().add(jPanel1);

        jm_juego.setText("Juego");

        j_mItemIniciar.setText("Iniciar Partida");
        j_mItemIniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                j_mItemIniciarActionPerformed(evt);
            }
        });
        jm_juego.add(j_mItemIniciar);

        jmb_config.add(jm_juego);

        setJMenuBar(jmb_config);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void j_mItemIniciarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_j_mItemIniciarActionPerformed
       obj_escenario.setEscenario(tablero);
       JOptionPane.showMessageDialog(this, "Se lanzara el dado para decidir quien comienza");
       jugador="";
    }//GEN-LAST:event_j_mItemIniciarActionPerformed

    private void jb_lanzarDadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jb_lanzarDadoActionPerformed
        if(jugador.equals(""))
        {
            int hum=0,maq=0;
            while(hum==maq)
            {
                hum=lanzarDado();
                JOptionPane.showMessageDialog(this, "Usted sacó: "+hum);
                maq=lanzarDado();
                if(hum<maq){
                    JOptionPane.showMessageDialog(this, "Robot sacó: "+maq+", Comienza el Robot");
                    jugador="robot";
                    jugarRobot();
                }else {
                    JOptionPane.showMessageDialog(this, "Robot sacó: "+maq+", Comienza Usted");
                    jugador="humano";
                }

            }
         }else
         {
            jugarHumano();
         }
    }//GEN-LAST:event_jb_lanzarDadoActionPerformed

    public void jugarRobot()
    {
        int desplaza=lanzarDado();
        System.out.println("Roboto saco ="+desplaza);
        boolean encuentro=obj_SnaksNLadres.desplazar("robot", desplaza);
        System.out.println(""+encuentro);
        //desplazo y luego y dependiendo de si hayi encuentro procedo a llamar minijuegos
        ArrayList posicionEscenario=obj_SnaksNLadres.getPos(obj_SnaksNLadres.maquina);
        System.out.println("Robot queda en="+posicionEscenario.get(0)+","+posicionEscenario.get(1));
        boolean atajo=obj_SnaksNLadres.esAtajo(obj_SnaksNLadres.maquina);
        obj_escenario.desplazarJugador(posicionEscenario, "robot",false);
        
        if(atajo)
        {
            System.out.println("Posicion antes de tomar atajo"+obj_SnaksNLadres.maquina);
            obj_SnaksNLadres.tomarAtajo("robot", obj_SnaksNLadres.maquina);
            System.out.println("Posicion despues de tomar atajo"+obj_SnaksNLadres.maquina);
            //desplazo y luego y dependiendo de si hayi encuentro procedo a llamar minijuegos
            posicionEscenario.addAll(obj_SnaksNLadres.getPos(obj_SnaksNLadres.maquina));
            System.out.println("Robot queda en="+posicionEscenario.get(0)+","+posicionEscenario.get(1));

            obj_escenario.desplazarJugador(posicionEscenario, "robot",atajo);
        }
        if(encuentro)
        {
            lanzarMinijuego("humano", "robot");

            JOptionPane.showMessageDialog(this, "Se lanza Minijuego");
        }
    }

    public void jugarHumano(){
        int desplaza=lanzarDado();
        System.out.println("Humano saco ="+desplaza);
        boolean encuentro=obj_SnaksNLadres.desplazar("humano", desplaza);
        //desplazo y luego y dependiendo de si hayi encuentro procedo a llamar minijuegos
        ArrayList posicionEscenario=obj_SnaksNLadres.getPos(obj_SnaksNLadres.humano);
        System.out.println("Humano queda en="+posicionEscenario.get(0)+","+posicionEscenario.get(1));

        boolean atajo=obj_SnaksNLadres.esAtajo(obj_SnaksNLadres.humano);
        obj_escenario.desplazarJugador(posicionEscenario, "humano",false);

        if(atajo)
        {
            System.out.println("Posicion antes de tomar atajo H "+obj_SnaksNLadres.humano);
            obj_SnaksNLadres.tomarAtajo("humano", obj_SnaksNLadres.humano);
            System.out.println("Posicion despues de tomar atajo H "+obj_SnaksNLadres.humano);
            //desplazo y luego y dependiendo de si hayi encuentro procedo a llamar minijuegos
            posicionEscenario=obj_SnaksNLadres.getPos(obj_SnaksNLadres.humano);
            System.out.println("Humano queda en="+posicionEscenario.get(0)+","+posicionEscenario.get(1));

            obj_escenario.desplazarJugador(posicionEscenario, "humano",atajo);
        }
        if(encuentro)
        {
            lanzarMinijuego("robot","humano");
            JOptionPane.showMessageDialog(this, "Se lanza Minijuego");
        }
        jugarRobot();
    }

    private int lanzarDado()
    {
        Random randonGen = new Random();
        int num=0;
        while(num==0)
        {
            num = randonGen.nextInt(6);
        }
        return num;
    }

    public void lanzarMinijuego(String jugador1, String jugador2)
    {
        int eleccion=(int)Math.random()*2;

        if(eleccion==0)
        {
            PizzaGUI pizza= new PizzaGUI(jugador1, jugador2);
        }

        if(eleccion==1)
        {
            GUI_Territorio territorio= new GUI_Territorio(jugador1);
        }
    }
    
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GUI_Agentes().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel jPanel1;
    private javax.swing.JMenuItem j_mItemIniciar;
    private javax.swing.JButton jb_lanzarDado;
    private javax.swing.JFileChooser jfc_selectorEscenario;
    private javax.swing.JMenu jm_juego;
    private javax.swing.JMenuBar jmb_config;
    private javax.swing.JPanel jp_juego;
    // End of variables declaration//GEN-END:variables
    private int returnValJFC;
    private EscenarioGrafico obj_escenario;
    public static final int ancho=601;
    public static final int alto=601;
    private int tamanoEscX, tamanoEscY;
    private int [][] tablero;
    private String jugador="";
    //private Territorio obj_territorio;
    private PizzaGUI obj_pizza;
    private EscenarioSnakesNLadrs obj_SnaksNLadres;
    //private Precipicio obj_precipicio;
}
